const express = require('express');
const fs = require('fs');

// 依次读取 t1, t2, t3 的内容
// 回调函数的写法
// fs.readFile('./doc/t1.txt', 'utf8', function (err, data1) {
//   console.log('t1读取错误：', err);
//   console.log('t1读取成功：', data1);

//   fs.readFile('./doc/t2.txt', 'utf8', function (err, data1) {
//     console.log('t2读取错误：', err);
//     console.log('t2读取成功：', data1);

//     fs.readFile('./doc/t3.txt', 'utf8', function (err, data1) {
//       console.log('t3读取错误：', err);
//       console.log('t3读取成功：', data1);
//     });
//   });
// });

// Promise 写法
function read(src) {
  return new Promise(function (resolve, reject) {
    fs.readFile(src, 'utf8', function (err, data) {
      if (err) {
        reject(err)
      }
      resolve(data);
    })
  })
}
// read('./doc/t1.txt')
//   .then(function (res) {
//     console.log('t1内容：', res)
//     return read('./doc/t2.txt')
//   })
//   .then(function (res) {
//     console.log('t2内容：', res)
//     return read('./doc/t3.txt')
//   })
//   .then(function (res) {
//     console.log('t3内容：', res)
//   })
//   .catch(function (err) {
//     console.log('读取失败：', err);
//   });

// Promise.resolve('成功')
//   .then(function (res) {
//     console.log(res);
//   });

// 并发处理
// Promise.all([
//   read('./doc/t1.txt'),
//   read('./doc/t2.txt'),
//   read('./doc/t3.txt')
// ])
//   .then(function (res) {
//     console.log('成功：', res);
//   })
//   .catch(function (err) {
//     console.log('失败：', err);
//   });

// 找跑得快的
// Promise.race([
//   read('./doc/t1.txt'),
//   read('./doc/t2.txt'),
//   read('./doc/t3.txt')
// ])
//   .then(function (res) {
//     console.log('成功：', res);
//   })
//   .catch(function (err) {
//     console.log('失败：', err);
//   });

// new Promise(function (resolve, reject) {
//   fs.readFile('./doc/t3.txt', 'utf8', function (err, data) {
//     if (err) {
//       reject(err)
//     }
//     resolve(data);
//   })
// })
//   .then(function (res) {
//     console.log('读取成功：', res);
//   })
//   .then(function (res) {
//     console.log('第二个 then成功：', res); // undefined
//   })
//   .catch(function (err) { // 这里的 catch 必须放在最后，会捕获上方任意一个错误
//     console.log('读取失败：', err);
//   });

// new Promise(function (resolve, reject) {
//   fs.readFile('./doc/t3.txt', 'utf8', function (err, data) {
//     if (err) {
//       reject(err)
//     }
//     resolve(data);
//   })
// })
//   .then(function (res) {
//     console.log('读取成功：', res);
//     return 1;
//   })
//   .then(function (res) {
//     console.log('第二个 then成功：', res); // 1
//   })
//   .catch(function (err) {
//     console.log('读取失败：', err);
//   });

// new Promise(function (resolve, reject) {
//   fs.readFile('./doc/t3.txt', 'utf8', function (err, data) {
//     if (err) {
//       reject(err)
//     }
//     resolve(data);
//   })
// })
//   .then(function (res) {
//     console.log('读取成功：', res);
//     throw Error('强行错误');
//   })
//   .then(function (res) {
//     console.log('第二个 then成功：', res); // 不会执行
//   })
//   .catch(function (err) {
//     console.log('读取失败：', err); // 捕获上方的 throw Error
//   });

// new Promise(function (resolve, reject) {
//   fs.readFile('./doc/t3.txt', 'utf8', function (err, data) {
//     if (err) {
//       reject(err)
//     }
//     resolve(data);
//   })
// })
//   .then(function (res) {
//     console.log('读取成功：', res);

//     // 返回一个 Promise 的时候，根据 Promise的状态来选择执行
//     return new Promise(function (resolve, reject) {
//       fs.readFile('./doc/t2.tx', 'utf8', function (err, data) {
//         if (err) {
//           reject(err)
//         }
//         resolve(data);
//       })
//     })
//   })
//   .then(function (res) {
//     console.log('第二个 then成功：', res);
//   })
//   .catch(function (err) {
//     console.log('读取失败：', err);
//   });

const app = express();

app.use(function (req, res) {
  res.json({
    msg: 'haha'
  });
});

app.listen(3000, function () {
  console.log('express server is running at port 3000');
});